package com.jiazhong.controller;

import com.jiazhong.pojo.Student;
import com.jiazhong.service.AccountService;
import com.jiazhong.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;

//要知道WEB-INF中的内容是用户无法访问的，只能从控制层访问方法
@Controller
//类级别请求映射，所有方法基础路径为/student
@RequestMapping("/student")

public class StudentController {
//    自动注入StudentService实现类，限定使用名称为"StudentServiceImpl"的Bean
//    @Autowired实现依赖自动装配，@Qualifier解决所实现类的歧义问题
    @Autowired
    @Qualifier("StudentServiceImpl")
    private StudentService studentService;

    @Autowired
    private AccountService accountService;

    @RequestMapping("/allcount")
    public String count(Model model) {
// 调用服务层查询所有书籍
        try {
            accountService.transfer("1", "2", 3.0);
            System.out.println("转账成功！");
        } catch (Exception e) {
            System.out.println("转账失败：" + e.getMessage()); // 捕获事务回滚后的异常
        }
        return "account";
    }

    /**
     * 1.方法一：查询所有学生
     *
     * @param model 用于向视图传递数据模型
     * @return 返回视图名称"allStudent"，对应JSP页面
     * @RequestMapping 处理GET请求，路径为/student/allStudent
     */
    @RequestMapping("/allStudent")
    public String List(Model model) {
//        调用服务层查询所有学生
        List<Student> list = studentService.selectAllService();
//        将查询结果存入模型，键为"list"，视图可通过${list}访问
        model.addAttribute("list", list);
//        视图解析器会拼接为/WEB-INF/jsp/addStudent.jsp
        return "allStudent";
    }

    /**
     * 2.方法二：跳转到添加学生页面
     *
     * @return 返回视图名称"addStudent"，对应学生添加表单页面
     * @RequestMapping 处理GET请求，路径为/student/toAddStudent
     */
    @RequestMapping("/toAddStudent")
    public String toAddStudent() {
//        空方法体表示直接跳转视图，无业务逻辑处理
        return "addStudent";
    }

    /**
     * 3.方法三：处理学生添加请求
     *
     * @return 重定向到学生列表页，防止表单重复提交
     * @RequestMapping 处理POST请求，路径为/student/addStudent
     * @Param student 通过表单数据自动绑定到Student对象
     */
    @RequestMapping("/addStudent")
    public String addStudent(Student student) {
//        打印日志（生产环境建议使用日志框架）
        System.out.println(student);
//        调用服务层执行插入操作
        studentService.insertService(student);
//        重定向到查询全部接口,实现页面刷新
        return "redirect:/student/allStudent";
    }

    /**
     * 4.方法四：跳转到学生信息更新页面
     *
     * @return 返回视图名称"updateStudent"，对应修改表单页面
     * @RequestMapping 处理GET请求，路径为/student/toUpdateStudent/{id}
     * @Param model 用于传递待修改的学生数据
     * @Param id 路径变量,学生唯一标识
     */
    @RequestMapping("/toUpdateStudent")
    public String toUpdateStudent(Model model, int id) {
//        根据id查询学生详情
        Student student = studentService.getOneService(id);
//        将学生信息存入模型
        model.addAttribute("student", student);
//        输出调试信息
        System.out.println(student);
//        返回修改页面
        return "updateStudent";
    }

    /**
     * 5.方法五：处理学生更新请求
     *
     * @return 重定向到学生列表页
     * @RequestMapping 处理POST请求，路径为/student/updateStudent
     * @Param model 用于传递更新后的学生数据
     * @Param student 通过表单数据自动绑定到Student对象
     */
    @RequestMapping("/updateStudent")
    public String toUpdateStudent(Model model, Student student) {
//        打印更新数据(建议使用日志)
        System.out.println(student);
//        调用服务层执行更新操作
        studentService.updateService(student);
//        重新查询最新数据(可选,用于验证更新结果)
        Student oneService = studentService.getOneService(student.getId());
        model.addAttribute("students", oneService);
//        重定向到列表页
        return "redirect:/student/allStudent";
    }

    /**
     * 6.方法六：处理学生删除请求
     *
     * @return 重定向到学生列表页
     * @RequestMapping 处理GET请求，路径为/student/del/{id}
     * @Param id 路径变量,学生唯一标识
     */
    @RequestMapping("/del/{id}")
    public String delStudent(@PathVariable("id") int id) {
//        调用服务层执行删除操作
        studentService.deleteService(id);
//        重定向到列表页实现页面刷新
        return "redirect:/student/allStudent";
    }
}
